// abc413F

#include <bits/stdc++.h>
using namespace std;
const int N = 3005;

int step[N][N], cnt[N][N];
// step存储每个点的最短距离，cnt记录每个点被访问的次数
int dx[4] = {1, 0, -1, 0}; // 四个方向的x偏移量：
int dy[4] = {0, 1, 0, -1}; // 四个方向的y偏移量：

int main() {
  int h, w, k; // 网格高度h，宽度w，初始点数量k
  cin >> h >> w >> k;

  // 初始化距离矩阵，-1表示未确定距离
  for (int i = 1; i <= h; ++i) {
    for (int j = 1; j <= w; ++j) {
      step[i][j] = -1;
    }
  }

  queue  <pair<int, int>>  Q; // BFS队列

  // 读入k个初始点并初始化
  for (int i = 1; i <= k; ++i) {
    int x, y;
    cin >> x >> y;
    step[x][y] = 0; // 初始点距离设为0
    Q.push({x, y});     // 加入队列
  }

  long long ans = 0; // 存储所有点距离之和

  // BFS主循环
  while (!Q.empty()) {
    int x, y;
    tie(x, y) = Q.front();//查看队头
    Q.pop(); //出队
    ans += step[x][y]; // 累加当前点的距离

    // 检查四个相邻方向
    for (int d = 0; d < 4; ++d) {
      int nx = x + dx[d];
      int ny = y + dy[d];
      // 边界检查
      if (nx < 1 || nx > h || ny < 1 || ny > w)
        continue;

      // 如果相邻点(nx,ny)未确定距离
      if (step[nx][ny] == -1) {
        cnt[nx][ny]++; // 增加访问计数

        // 当被访问两次时确定距离（特殊条件）
        if (cnt[nx][ny] == 2) {
          step[nx][ny] = step[x][y] + 1; // 距离为当前点距离+1
          Q.push({nx, ny});                      // 加入队列继续BFS
        }
      }
    }
  }

  cout << ans; // 输出所有点距离之和
  return 0;
}
